package com.lyd.collections.stream;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @Author:lyd
 **/
public class StreamDemo8 {
    public static void main(String[] args) {
        //collect(Collector collector)  收集流中的数据放到集合中（List、Set、Map）
        ArrayList<String> strList1 = new ArrayList<>();
        Collections.addAll(strList1, "张无忌-男-15", "张三丰-男-89", "周芷若-女-20",
                "刘备-男-56", "孙权-男-54", "曹操-男-61", "皇太极-男-90");

        //把所有的男性收集起来放入List集合中
        List<String> stringList = strList1.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toList());
        System.out.println(stringList);

        //Set集合自动去重
        Set<String> stringSet = strList1.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toSet());
        System.out.println(stringSet);

        //把所有的男性收集起来放入Map集合中，名字作为键，年龄作为值
        Map<String, Integer> map1 = strList1.stream()

                /**
                 * toMap : 参数1表示键的生成规则
                 *          参数2表示值的生成规则
                 * 参数1  : Function泛型一：表示流中的每个数据类型
                 *                  泛型二：表示Map集合中键的类型
                 *           apply()形参：依次表示流里面的每一个数据
                 *                  方法体：生成键的代码
                 *                  返回值：已经生成的键
                 *  参数1  : Function泛型一：表示流中的每个数据类型
                 *                  泛型二：表示Map集合中值的类型
                 *          apply()形参：依次表示流里面的每一个数据
                 *               方法体：生成键的代码
                 *               返回值：已经生成的值
                 */
                .collect(Collectors.toMap(new Function<String, String>() {
                    @Override
                    public String apply(String s) {
                        return s.split("-")[0];
                    }
                }, new Function<String, Integer>() {
                    @Override
                    public Integer apply(String s) {
                        return Integer.parseInt(s.split("-")[2]);
                    }
                }));
        System.out.println(map1);
//用lambda 方式表示
        Map<String, Integer> map2 = strList1.stream()
                .filter(s->"男".equals(s.split("-")[1]))
                .collect(Collectors.toMap(
                        s1 -> s1.split("-")[0],
                        s2 -> Integer.parseInt(s2.split("-")[2])));
        System.out.println(map2);
    }
}
